草庐IT

c++ getline和stringstream

全部标签

c++ - 如何使用 stringstream 分隔逗号分隔的字符串

这个问题在这里已经有了答案:HowdoIiterateoverthewordsofastring?(82个回答)关闭4年前。我有以下代码:std::stringstr="abcdef,ghi";std::stringstreamss(str);stringtoken;while(ss>>token){printf("%s\n",token.c_str());}输出是:abcdef,ghi所以stringstream::>>操作符可以用空格分隔字符串,但不能用逗号分隔。有没有办法修改上面的代码,才能得到下面的结果?input:"abc,def,ghi"output:abcdefghi

c++ - 为什么包含 std::stringstream 的类的 move 语义会导致编译器错误?

如何使这个简单的类可move?我认为是正确的只会产生一堵错误的墙......#include#include#includeclassmessage{public:message()=default;//Moveconstructormessage(message&&other):stream_(std::move(other.stream_))//Nope{}//Moveassignmentmessage&operator=(message&&other){if(this!=&other){stream_=std::move(other.stream_);//Nope#2}retur

c++ - 为什么包含 std::stringstream 的类的 move 语义会导致编译器错误?

如何使这个简单的类可move?我认为是正确的只会产生一堵错误的墙......#include#include#includeclassmessage{public:message()=default;//Moveconstructormessage(message&&other):stream_(std::move(other.stream_))//Nope{}//Moveassignmentmessage&operator=(message&&other){if(this!=&other){stream_=std::move(other.stream_);//Nope#2}retur

c++ - stringstream、string 和 char* 转换混淆

我的问题可以归结为,从stringstream.str().c_str()返回的字符串在哪里存在内存中,为什么不能将它分配给constchar*?这个代码示例将比我解释得更好#include#include#includeusingnamespacestd;intmain(){stringstreamss("thisisastring\n");stringstr(ss.str());constchar*cstr1=str.c_str();constchar*cstr2=ss.str().c_str();coutstringstream.str().c_str()可以分配给constch

c++ - std::getline() 返回

我有一个循环,它使用getline()读取文件中的每一行:istreamis;stringline;while(!getline(is,line).eof()){//...}我注意到像这样调用getline()似乎也有效:while(getline(is,line))这里发生了什么?getline()返回一个流引用。它是否以某种方式转换为指针?这实际上是一个好习惯还是我应该坚持第一种形式? 最佳答案 getline()返回的istream正在隐式调用其运算符void*()方法,该方法返回流是否已运行进入错误。因此,它比调用eof()

c++ - std::getline() 返回

我有一个循环,它使用getline()读取文件中的每一行:istreamis;stringline;while(!getline(is,line).eof()){//...}我注意到像这样调用getline()似乎也有效:while(getline(is,line))这里发生了什么?getline()返回一个流引用。它是否以某种方式转换为指针?这实际上是一个好习惯还是我应该坚持第一种形式? 最佳答案 getline()返回的istream正在隐式调用其运算符void*()方法,该方法返回流是否已运行进入错误。因此,它比调用eof()

c++ - 如何测试 stringstream operator>> 是否解析了错误的类型并跳过它

我有兴趣讨论使用stringstream解析具有多种类型的行的方法。我将首先查看以下行:"2.8321.3067nana1.678"现在让我们假设我有一个包含多个strings和doubles的长行。解决这个问题的明显方法是对字符串进行标记,然后检查每个字符串的转换。我有兴趣跳过第二步并直接使用stringstream来查找数字。我想出一个解决这个问题的好方法是通读字符串并检查failbit是否已设置,如果我尝试将字符串解析为double值,它将被设置。假设我有以下代码:stringa("2.8321.3067nana1.678");stringstreamparser;parser.

c++ - 如何测试 stringstream operator>> 是否解析了错误的类型并跳过它

我有兴趣讨论使用stringstream解析具有多种类型的行的方法。我将首先查看以下行:"2.8321.3067nana1.678"现在让我们假设我有一个包含多个strings和doubles的长行。解决这个问题的明显方法是对字符串进行标记,然后检查每个字符串的转换。我有兴趣跳过第二步并直接使用stringstream来查找数字。我想出一个解决这个问题的好方法是通读字符串并检查failbit是否已设置,如果我尝试将字符串解析为double值,它将被设置。假设我有以下代码:stringa("2.8321.3067nana1.678");stringstreamparser;parser.

c++ - 在 cin 之后使用 getline(cin, s)

这个问题在这里已经有了答案:Whydoesstd::getline()skipinputafteraformattedextraction?(5个回答)关闭2年前.我需要以下程序来获取整行用户输入并将其放入字符串名称中:cout>number;cout在getline()命令之前使用cin>>number命令(我猜这是问题所在),它不允许我输入名字。为什么?我听说过关于cin.clear()命令的一些信息,但我不知道它是如何工作的,也不知道为什么它是必要的。 最佳答案 cout>number;cin.ignore(256,'\n')

c++ - 在 cin 之后使用 getline(cin, s)

这个问题在这里已经有了答案:Whydoesstd::getline()skipinputafteraformattedextraction?(5个回答)关闭2年前.我需要以下程序来获取整行用户输入并将其放入字符串名称中:cout>number;cout在getline()命令之前使用cin>>number命令(我猜这是问题所在),它不允许我输入名字。为什么?我听说过关于cin.clear()命令的一些信息,但我不知道它是如何工作的,也不知道为什么它是必要的。 最佳答案 cout>number;cin.ignore(256,'\n')